package com.kj.tms.pri.system.user.service;


import com.kj.tms.common.bean.dto.Pager;
import com.kj.tms.common.bean.dto.ReturnData;
import com.kj.tms.pri.system.org.dto.OrgDto;
import com.kj.tms.pri.system.role.dto.RoleDto;
import com.kj.tms.pri.system.user.dto.UserDto;
import com.kj.tms.pri.system.user.dto.UserOrgDto;
import org.springframework.http.ResponseEntity;

import java.util.List;
import java.util.Map;

/**
 * Created by wzl on 2017/10/12.
 */
public interface UserService {

    List<UserDto> getAll();

    /**
     * 用户登录
     *
     * @param ip       登录ip
     * @param username
     * @param password
     * @return
     */
    List<OrgDto> login(String ip, String username, String password);

    /**
     * @param user
     * @Title:
     * @Description 更换机构重新存储session
     * @Method
     * @Return
     * @Date: 2017年10月18日 18:23
     * @Author:wangguoqing
     * @version: 2017年10月18日
     */
    UserDto changeOrgCode(UserDto user);

    /**
     * 根据查询条件查询指定用户
     *
     * @param code
     * @return
     */
    UserDto getByCode(Object code);

    /**
     * 分页显示用户列表
     *
     * @param userDto
     * @return
     */
    Pager listUser(UserDto userDto);

    /**
     * @param
     * @return
     * @throws
     * @method [queryOrgByList]
     * @description [模糊匹配查询机构数据到列表]
     * @author 王国庆
     * @version 1.0
     * @date 2017年12月28日 14:22
     */
    List<OrgDto> queryOrgByList(OrgDto orgDto);

    /**
     * 添加用户
     *
     * @param requestParameters 用户信息
     * @param orgRoleList       配置角色机构信息
     */
    ReturnData save(Map<String, String> requestParameters, String orgRoleList) throws Exception;

    /**
     * @param dto
     * @param oldPwd
     * @Title: modifyPassword
     * @Description 用户密码修改
     * @Method modifyPassword
     * @Return boolean
     * @Date: 2017年11月02日 9:48
     * @Author:wangguoqing
     * @version: 2017年11月02日
     */
    boolean updatePassword(UserDto dto, String oldPwd) throws Exception;

    /**
     * 根据roleId 查询用户信息
     *
     * @param Id
     * @return
     */
    List<UserDto> listUserByRole(String Id);

    /**
     * @param user
     * @return
     * @throws
     * @method [delete]
     * @description [删除用户]
     * @author 王国庆
     * @version 1.0
     * @date 2017年12月22日 15:16
     */
    void delete(UserDto user);


    /**
     * 更新用户信息
     *
     * @param user 用户信息
     */
    void update(UserDto user);

    /**
     * 更新用户信息
     *
     * @param requestParameters 用户信息
     * @param orgRoleList       配置角色机构信息
     */
    void update(Map<String, String> requestParameters, String orgRoleList);

    /**
     * 导出
     *
     * @param userDto
     */
    ResponseEntity<byte[]> exportData(UserDto userDto);


    /**
     * @param userDto
     * @Title: 查询机构人员列表不分页 (条件查询)
     * @Description
     * @Method listByConditionNoPage
     * @Return
     * @Date: 2017年10月27日 15:56
     * @Author:wangguoqing
     * @version: 2017年10月27日
     */
    List<UserDto> listByConditionNoPage(UserDto userDto);

    /**
     * 用户选择机构进行登录
     *
     * @param orgCode
     * @return
     */
    UserDto loginIndex(String orgCode, String orgName);


    /**
     * @param userDto 用户信息Id
     * @return Pager
     * @throws
     * @method [listOrgRoleByPage]
     * @description [加载配置机构权限信息]
     * @author 王国庆
     * @version 1.0
     * @date 2017年12月11日 17:35
     */
    List<UserOrgDto> listOrgRoleByPage(UserDto userDto);

    /**
     * @param userDto
     * @param orgCode
     * @param orgName 机构名称
     * @return Pager
     * @throws
     * @method [根据当前机构加载配置机构权限分页信息]
     * @description [ListOrgByUserOrgPage]
     * @author 王国庆
     * @version 1.0
     * @date 2017年12月14日 16:12
     */
    List<UserOrgDto> listOrgByUserOrgPage(UserDto userDto, String orgCode, String orgName);

    /**
     * @param dto 角色信息
     * @return Pager
     * @throws
     * @method [listOrg]
     * @description [加载配置机构权限信息]
     * @author 王国庆
     * @version 1.0
     * @date 2017年12月11日 17:35
     */
    Pager listOrg(OrgDto dto);


    /**
     * @param map
     * @return List<UserDto> 返回类型
     * @throws Exception
     * @Title: listWaitUser
     * @Description: 查询等待分配的机构人员分页数据
     */
    List<UserDto> listWaitUser(Map map);


    /**
     * @param map
     * @Title: getWaitUserCount
     * @Description 查询等待分配的机构人员分页数据数量
     * @Method
     * @Return
     * @Date: 2017年10月25日 10:28
     * @Author:wangguoqing
     * @version: 2017年10月25日
     */
    int getWaitUserCount(Map map);


    /**
     * @Method saveListUserDtoByExcle
     * @Param [list]
     * @Return com.hongtu.tms.basebean.basedata.ReturnData
     * @Exception
     * @Description [通过Excel保存用户信息，具体保存或更新根据具体业务处理]
     * @Author dsd
     * @Version 1.0
     * @Date 2017/12/20 14:58
     */
    ReturnData saveListUserDtoByExcel(List<UserDto> list);

    /**
     * @param roleId 角色ID
     * @return
     * @throws
     * @method [initRole]
     * @description [初始化角色数据]
     * @author 王国庆
     * @version 1.0
     * @date 2018年01月02日 17:56
     */
    List<RoleDto> initRole(String roleId);


    /**
     * @param roleNames 角色名称数组 以,分开
     * @return
     * @throws
     * @method [queryMutexByRoleNames]
     * @description [根据角色名称查询互斥角色]
     * @author 王国庆
     * @version 1.0
     * @date 2018年01月08日 16:50
     */
    ReturnData queryMutexByRoleNames(String roleNames);

}
